import CustomAssemblerV2 from "./CustomAssemblerV2";

const { ccclass, property, menu } = cc._decorator;

@ccclass
@menu('CustomRenderV2/CustomRenderV2')
export default class CustomRenderV2 extends cc.RenderComponent {

    /** 纹理 */
    @property({ type: cc.Texture2D, tooltip: '纹理' })
    texture: cc.Texture2D = null;

    protected _initedMaterial: boolean = false

    onEnable() {
        super.onEnable();
        this.init();

        if (!this._assembler) { return; }
        //@ts-ignore
        this._assembler.updateRenderData(this);
    }

    /**
     * @dec 更新材质  
     * @dec 设置顶点数据修改 `setVertsDirty()`
     */
    public init() {
        if (!this._initedMaterial) {
            this.updateMaterial();
        }
        this.setVertsDirty();
    }

    /**
     * @dec override
     * @dec 在父类 `CCRenderCompoent` 的 `__proload` 中会被调用
     */
    public _resetAssembler() {
        let assembler = this._assembler = new CustomAssemblerV2();
        assembler.init(this);
    }

    /**
     * @dec Update material properties
     * @dec 设置Effect(builtin-2d-sprite.effect)里面使用的纹理属性
     * @dec 或者用户自定的纹理属性
     */
    protected _updateMaterial() {
        let material = this.getMaterial(0);
        if (material) {
            // TODO define
            // pos = cc_matViewProj * cc_matWorld * pos;
            material.define('CC_USE_MODEL', 1);

            // default effect 设置的属性
            material.setProperty('texture', this.texture);
        }
    }

    /**
     * @dec 更新材质
     */
    protected updateMaterial() {
        this._updateMaterial();
        this._initedMaterial = true;
    }

    public getPointCount() {
        return 10;
    }
}